package test.nine;
import static util.Util.*;

interface Game{
	boolean move();
}
interface GameFactory{
	Game getGame();
}

class Checkers implements Game{
	private int moves=0;
	private static final int MOVES=3;
	public boolean move() {
		print("checkers move "+moves);
		return ++moves!=MOVES;
	}
}

class checkersFactory implements GameFactory{
	@Override
	public Game getGame() {
		return new Checkers();
	}
}

class Chess implements Game{
	private int moves=0;
	private static final int MOVES=4;
	@Override
	public boolean move() {
		print("Chess move "+moves);
		return ++moves!=MOVES;
	}
}

class ChessFactory implements GameFactory{
	@Override
	public Game getGame() {
		return new Chess();
	}
}
public class Games {
	public static void playGame(GameFactory factory){
		Game s=factory.getGame();
		while(s.move());
	}
	
	public static void main(String[] args) {
		playGame(new checkersFactory());
		playGame(new ChessFactory());
	}
}
